﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<locale.h>
#include<stdbool.h>
#include<assert.h>
#include<time.h>
void test2(pGame_Snack pgame_snack)
{
	//打印食物
	if (pgame_snack->pfood == NULL)
	{
		pgame_snack->pfood = Food(pgame_snack->pheadsnack);
		PrintFood(pgame_snack);
	}
	else {
		PrintFood(pgame_snack);//就算重复打印食物，也不会造成过大损耗
	}

	//打印蛇
	//蛇移动时可以创建一个SnackNode节点，将其坐标根据移动方向设置为蛇头的下一个位置
	//然后看该节点是否为食物/墙/蛇身，若均不是，则可以直接将新节点设置为蛇头，并将蛇的最后一个节点删除
	//最后将被删除节点的位置打印为空格，若下一个位置为食物/墙/蛇身，就要分情况讨论了
	pSnackNode next_snack_node = NextSnackNode(pgame_snack);
	if (IsWall(next_snack_node->_x, next_snack_node->_y))
	{
		pgame_snack->game_status = KILL_BY_WALL;
	}
	else if (IsFood(next_snack_node->_x, next_snack_node->_y, pgame_snack->pfood))
	{
		next_snack_node->next = pgame_snack->pheadsnack;
		pgame_snack->pheadsnack = next_snack_node;
		pgame_snack->total_​score += pgame_snack->food_score;
		pgame_snack->pfood = NULL;//吃完记得将食物指针置空，在下次循环时检测到为NULL会重新生成食物
		PrintSnack(pgame_snack);
		Sleep(pgame_snack->sleep_time);
	}
	else if (IsSnack(next_snack_node->_x, next_snack_node->_y, pgame_snack->pheadsnack) && !IsSnackTail(next_snack_node->_x, next_snack_node->_y, pgame_snack->pheadsnack))
	{
		pgame_snack->game_status = KILL_BY_SELF;
	}
	else {
		next_snack_node->next = pgame_snack->pheadsnack;
		pgame_snack->pheadsnack = next_snack_node;
		pSnackNode cur = pgame_snack->pheadsnack;
		while (cur->next->next != NULL)//由于蛇身长度初始化时就设置为6，所以不用担心cur->next->next会造成解引用空指针
		{
			cur = cur->next;
		}
		SetPos(cur->next->_x, cur->next->_y);
		printf("  ");//如果下一个位置什么都没有，就要把此时的蛇尾覆盖为空格
		free(cur->next);
		cur->next = NULL;
		PrintSnack(pgame_snack);
		Sleep(pgame_snack->sleep_time);

	}
}
int main()
{
	//验证食物的打印是否会绕过蛇
	while (1)
	{

		Game_Snack game_snack2 = { 0 };
		game_snack2.pfood = Food(pgame_snack->pheadsnack);
		PrintFood(&game_snack2);
	}

	//
	return 0;
}